package com.csmarket.csmarketbackend.utils;

import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import io.jsonwebtoken.security.Keys;
import jakarta.annotation.PostConstruct;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

import java.security.Key;
import java.util.Date;
@Component
public class JwtUtils
{
    private static final long EXPIRATION = 86400000; // 24小时

//    @Value( "${jwt.secret}" )
    private final String SECRET_KEY ="5a5ed9dc18df95a09c7497f3daaef22731d7510c192bbea3af69262acc222d9b" ;
//TODO 要从配置文件中获取密钥
    private final Key key=Keys.hmacShaKeyFor(SECRET_KEY.getBytes());;   //使用HMAC-SHA算法将字节数组转换为安全的密钥对象


    public  String generateToken(String username) {
        return Jwts.builder()
                .setSubject(username)
                .setExpiration(new Date(System.currentTimeMillis() + EXPIRATION))  //该行代码设置 JWT 令牌的过期时间，表示当前时间加上 24 小时后的日期。
                .signWith(key, SignatureAlgorithm.HS512)                           //该行代码使用密钥对象和签名算法 HMAC-SHA512 来对 JWT 令牌进行签名。
                .compact();//该行代码生成并返回 JWT 令牌。
    }

    public  String parseToken(String token) {
        return Jwts.parserBuilder()
                .setSigningKey(key)
                .build()
                .parseClaimsJws(token)                                            //该行代码使用 JWT 解析器构建器创建 JWT 解析器。
                .getBody()                                                        //该行代码使用 JWT 解析器解析 JWT 令牌，并返回 Claims 对象。
                .getSubject();                                                    //该行代码使用 JWT 解析器解析 JWT 令牌，并返回 JWT 令牌中的主题（即用户名）。
    }

}
